home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 2888 / 2888.xpi / content / control.js < prev    next >
Encoding:
JavaScript  |  2008-07-19  |  16.3 KB  |  452 lines

  1. var prefs = Components.classes["@mozilla.org/preferences-service;1"].
  2.               getService(Components.interfaces.nsIPrefService).getBranch("gmarks");
  3. var GMS;
  4. var strbundle;
  5. var gmarksObserver=null;
  6. var favResponses=0;
  7.  
  8. function showConnectError(bm){
  9.   var errBox=document.getElementById("submissionError");
  10.   if (errBox.getAttribute('hidden')=="true"){
  11.     errBox.setAttribute('hidden',false);
  12.   }
  13.   var lblTitle=document.getElementById("bookmarkTitleLabel");
  14.   lblTitle.textContent=bm.title;
  15.  
  16.   var lblURL=document.getElementById('bookmarkURLLabel');
  17.   lblURL.textContent=bm.url;
  18.  
  19.   setTimeout(function(){errBox.setAttribute('hidden','true')},10000);
  20. }
  21.  
  22. function doSignIn(){
  23.   var email=document.getElementById("txtEmail").value;
  24.   var password=document.getElementById("txtPassword").value;
  25.   var auto=document.getElementById("autosignin");
  26.   if (auto){
  27.     var signin=auto.checked;
  28.     prefs.setBoolPref(".signin",signin);
  29.     if (signin){
  30.       GMS.savePassInfo(email,password);
  31.     }
  32.   }
  33.   treeInit();
  34.   document.getElementById("signedOffContainer").setAttribute("hidden","true");
  35.  
  36.   GMS.onSignIn(true,email,password);
  37. }
  38.  
  39. var GM = {
  40.   editBookmark: null,
  41.   editOK: false,
  42.   delBkmk: null,
  43.   onRetryLoad : function(){
  44.     var container=document.getElementById("signedOffContainer");
  45.     container.setAttribute("hidden","true");
  46.     document.getElementById("gmarkList").setAttribute('hidden','false');
  47.  
  48.     GMS.getBookmarksFeed("onload",true);
  49.   },
  50.   onLoad : function() {
  51.     if (GMS.isSignedIn){
  52.       treeInit();
  53.       GM.updateBookmarkCount();
  54.       var container=document.getElementById("signedOffContainer");
  55.       document.getElementById("gmarkList").setAttribute('hidden','false');
  56.       container.setAttribute("hidden","true");
  57.     }
  58.     else{
  59.       GM.loadSignInDialog();
  60.     }
  61.   },
  62.   loadSignInDialog: function(fillPass){
  63.     var container=document.getElementById("signedOffContainer");
  64.     container.setAttribute("hidden","false");
  65.     var pass=GMS.getPassInfo();
  66.     if (pass){
  67.       if (fillPass==null){
  68.         document.getElementById("txtEmail").value=pass.user;
  69.         document.getElementById("txtPassword").value=pass.password;
  70.       }
  71.     }
  72.     document.getElementById("autosignin").checked=prefs.getBoolPref(".signin");//setAttribute("checked",prefs.getBoolPref(".signin"));
  73.     var tree = document.getElementById("gmarkList");
  74.     var treeview = getTreeView(tree);
  75.     if (treeview && treeview.data){
  76.       treeview.data = [];
  77.     }
  78.     tree.hidden=true;//setAttribute('hidden','true');
  79.   },
  80.   signOut: function(event){
  81.     var req=GMS.com.getSignOffRequest();
  82.     if (req!=null){
  83.       req.send(null);
  84.       req.onreadystatechange = function(ev){
  85.         if(req.readyState == 4)
  86.         {
  87.           var status = -1;
  88.           try {status = req.status} catch(e) {}
  89.           if(status == 200 || status == 302){
  90.             dump("signout status: "+status+"\n");
  91.             GMS.signOut();
  92.             document.getElementById("txtEmail").value="";
  93.             document.getElementById("txtPassword").value="";
  94.             GM.loadSignInDialog(false);
  95.           }
  96.         }
  97.       }
  98.     }
  99.     else{
  100.       GMS.signOut();
  101.       document.getElementById("txtEmail").value="";
  102.       document.getElementById("txtPassword").value="";
  103.       GM.loadSignInDialog(false);
  104.     }
  105.   },
  106.   signinKey: function(event){
  107.     if (event.keyCode==13){//enter
  108.       doSignIn();
  109.     }
  110.   },
  111.   //Gets the new feed
  112.   refresh : function(event) {
  113.     if (treeView!=null){
  114.       if (!treeView.treeBox){
  115.         treeInit();
  116.       }
  117.     }
  118.     else{
  119.       treeInit();
  120.     }
  121.  
  122.     var quick=true;
  123.     if (searchBox.value.length>0) searchBox.value="";
  124.     GMS.getBookmarksFeed("onrefresh",true);
  125.   },
  126.   //After we've gotten the new feed
  127.   onRefresh: function(hideImages){
  128.     //dump("onrefresh\n");
  129.     if (treeView==null || treeView.getTreeBox()==null) treeInit();
  130.     if (GMS.isSignedIn){
  131.       if (!treeView)
  132.         doOrganizeLoad();
  133.       treeView.getTreeBox().beginUpdateBatch();
  134.       var lbls,container;
  135.       if (treeView.type=="complete"){
  136.         document.getElementById("gmarkList").setAttribute('hidden','false');
  137.         container=document.getElementById("signedOffContainer");
  138.         container.setAttribute("hidden","true");
  139.         GM.updateBookmarkCount();
  140.       }
  141.       if (searchBox.value.length==0){
  142.         //dump("treeviewtype: "+treeView.type+"\n");
  143.         if (treeView.type=="complete"){
  144.           document.getElementById("gmarkList").setAttribute('hidden','false');
  145.           container.setAttribute("hidden","true");
  146.           lbls=treeView.getOpened();
  147.           treeView.data=getVisibleData("complete");
  148.           treeView.restoreContainers(lbls);
  149.           var tree=document.getElementById("gmarkList");
  150.           if (tree.currentIndex>=treeView.data.length){
  151.             tree.currentIndex=0;
  152.           }
  153.         }
  154.         else{
  155.           lblsTreeView.treeBox.beginUpdateBatch();
  156.           lbls=lblsTreeView.getOpened();
  157.           var curIndex = lblsTreeView.selection.currentIndex;
  158.           if (curIndex>-1 && curIndex<lblsTreeView.data.length && lblsTreeView.data[curIndex]){
  159.             var selected = lblsTreeView.data[curIndex].title;
  160.             lblsTreeView.data=getVisibleData("labels");
  161.             lblsTreeView.restoreContainers(lbls, selected);
  162.             lblsTreeView.treeBox.endUpdateBatch();
  163.             curIndex = lblsTreeView.selection.currentIndex
  164.             if (curIndex==-1 || !lblsTreeView.data[curIndex] ||
  165.                 (lblsTreeView.data[curIndex].title!=selected)){
  166.               //The current label has been removed, select the first label
  167.               lblsTreeView.selection.select(0);
  168.               treeView.parentLbl = lblsTreeView.data[0].title;
  169.             }
  170.           }
  171.           var tree=document.getElementById("gmarkLabels");
  172.  
  173.           lbls=treeView.getOpened();
  174.           treeView.data=getTreeData(treeView.parentLbl,true);
  175.           treeView.restoreContainers(lbls);
  176.           tree=document.getElementById("gmarkDetails");
  177.  
  178.         }
  179.       }
  180.       else{
  181.         //dump("in search\n");
  182.         var lvl=treeView.type=="complete" ? 0 : 1;
  183.         treeView.data=new Array();
  184.         for (var i=0;i<GMS.searchArray.length;i++){
  185.           treeView.data.push(new BookmarkData(1,GMS.searchArray[i],lvl));
  186.         }
  187.       }
  188.       treeView.treeBox.endUpdateBatch();
  189.     }
  190.     else if (treeView.type=="complete"){
  191.       var container=document.getElementById("signedOffContainer");
  192.       container.setAttribute("hidden","false");
  193.       var pass=GMS.getPassInfo();
  194.       if (pass){
  195.         document.getElementById("txtEmail").value=pass.user?pass.user:""
  196.         document.getElementById("txtPassword").value=pass.password?pass.password:"";
  197.       }
  198.       document.getElementById("autosignin").checked=prefs.getBoolPref(".signin");
  199.       document.getElementById("gmarkList").setAttribute('hidden','true');
  200.     }
  201.     //dump("done refresh\n");
  202.   },
  203.   quickRefresh : function(){
  204.     if (treeView.treeBox==null) treeInit();
  205.     GM.onRefresh(true);
  206.   },
  207.   updateBookmarkCount: function(){
  208.     var col=document.getElementById("mainCol");
  209.     if (col){
  210.       var label=col.getAttribute("label");
  211.       var pos=label.indexOf(" (");
  212.       if (pos>-1)
  213.         label=label.substring(0,pos);
  214.       if (GMS.showCount)
  215.         label+=" ("+GMS.bookmarkArray.length+")";
  216.       col.setAttribute("label",label)
  217.     }
  218.   },
  219.   getImages : function(){},
  220.  
  221.   addGMark : function(title, url,label){
  222.     var windowManager = Components.classes['@mozilla.org/appshell/window-mediator;1'].
  223.         getService();
  224.     var windowManagerInterface = windowManager.QueryInterface(
  225.         Components.interfaces.nsIWindowMediator);
  226.     var recentWindow = windowManagerInterface.getMostRecentWindow(
  227.         "navigator:browser" );
  228.  
  229.     var theUrl = url ? url : recentWindow.content.location.href;
  230.     var docTitle = title ? title : recentWindow.content.document.title;
  231.     var labels = label ? [label] : new Array();
  232.     var notes=""//document.getSelection();
  233.     var appInfo = Components.classes["@mozilla.org/xre/app-info;1"]
  234.                         .getService(Components.interfaces.nsIXULAppInfo);
  235.     var versionChecker = Components.classes["@mozilla.org/xpcom/version-comparator;1"]
  236.                                    .getService(Components.interfaces.nsIVersionComparator);
  237.     var FF3 = (versionChecker.compare(appInfo.version, "3.0a") >= 0);
  238.     if (prefs.getBoolPref('.ctrlD')==true && !FF3){
  239.       var arg=new wArg(docTitle,theUrl,labels,notes,1);
  240.       window.openDialog("chrome://browser/content/bookmarks/addBookmark2.xul",strbundle.getString("addBookmarkTitle"),"chrome,centerscreen,modal",arg);
  241.     }
  242.     else{
  243.       this.editOK=false;
  244.       window.openDialog("chrome://gmarks/content/editBookmark.xul",strbundle.getString("addBookmarkTitle"),"chrome,centerscreen,modal",docTitle, theUrl,labels,notes,0,null,true);
  245.       //if (this.editOK){
  246.       //  GMS.updateBookmark(this.editBookmark,true);
  247.       //  GMS.sendUpdateBookmark(this.editBookmark);
  248.       //}
  249.     }
  250.   },
  251.   onEditBookmark : function(bm) {
  252.     this.editBookmark=bm;
  253.     this.editOK=false;
  254.     this.delBkmk=null;
  255.     window.openDialog("chrome://gmarks/content/editBookmark.xul",strbundle.getString("editBookmarkTitle"),"chrome,centerscreen,modal",bm.title, bm.url,bm.labels,bm.notes,bm.id,bm.mode,false);
  256.   },
  257.   updateURL : function(bm){
  258.     var newURL=window.content.location.href;
  259.     GMS.onRemoveBookmark(bm,false,false);
  260.     GMS.actionHist.pop();
  261.     var obj2=new Array();
  262.     obj2.push({type: "url",url: bm.url});
  263.     /* Create a bookmark action so it can be undone */
  264.     GMS.generateBkmkAction("bookmark","properties", bm,obj2);
  265.     bm.url=newURL;
  266.     bm.id=0;
  267.     GMS.updateBookmark(bm,true);
  268.     GMS.sendUpdateBookmark(bm);
  269.   },
  270.   customFavicon: function(event){
  271.     var tree=document.popupNode.parentNode;
  272.     var view=getTreeView(tree);
  273.     var visibleData=view.data;
  274.     var index=pops.getBookmarkIndex();
  275.     if (index>-1){
  276.       var bkmk=visibleData[index];
  277.       //this.dataCustomFavicon(bkmk);
  278.       var prompts = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
  279.             .getService(Components.interfaces.nsIPromptService);
  280.       var rValue={},rTemp={};
  281.       var result= prompts.prompt(window, strbundle.getString("customFaviconTitle"),
  282.         strbundle.getString("customFaviconURL"),rValue,null,rTemp);
  283.       if (result){
  284.         var url=rValue.value
  285.         if (url && url.length>0){
  286.         bkmk.image=url;
  287.         if (bkmk.notes.length>0)
  288.           bkmk.notes+=" favicon:"+url;
  289.         else
  290.           bkmk.notes="favicon:"+url;
  291.         GMS.sendUpdateBookmark(bkmk);
  292.         view.invalidate();
  293.         }
  294.       }
  295.     }
  296.   },
  297.   //Old
  298.   dataCustomFavicon: function(bkmk){
  299.     try {
  300.       var kFilePickerContractID = "@mozilla.org/filepicker;1";
  301.       var kFilePickerIID = Components.interfaces.nsIFilePicker;
  302.       var kFilePicker = Components.classes[kFilePickerContractID].createInstance(kFilePickerIID);
  303.  
  304.       var kTitle = strbundle.getString("customFaviconTitle");
  305.       kFilePicker.init(window, kTitle, kFilePickerIID["modeOpen"]);
  306.       kFilePicker.appendFilters(kFilePickerIID.filterImages | kFilePickerIID.filterAll);
  307.       var file;
  308.       if (kFilePicker.show() != kFilePickerIID.returnCancel) {
  309.         file = kFilePicker.file;
  310.         if (!file) return;
  311.       }
  312.       else return;
  313.       var data=generateDataURI(file);
  314.       var pos=bkmk.notes.indexOf("data:image");
  315.       if (pos>-1){
  316.         if (pos==0)
  317.           bkmk.notes=data;
  318.         else
  319.           bkmk.notes=bkmk.notes.substring(0,pos)+data;
  320.       }
  321.       else if (bkmk.notes.length>0)
  322.         bkmk.notes+=" "+data;
  323.       else
  324.         bkmk.notes=data;
  325.       bkmk.image=data;
  326.       GMS.sendUpdateBookmark(bkmk);
  327.       view.invalidateRow(index);
  328.     }
  329.     catch(e){
  330.       Components.utils.reportError(e);
  331.     }
  332.   }
  333. }
  334.  
  335. //From http://developer.mozilla.org/en/docs/The_data_URL_scheme
  336. function generateDataURI(file) {
  337.   var contentType = Components.classes["@mozilla.org/mime;1"].getService(Components.interfaces.nsIMIMEService).getTypeFromFile(file);
  338.   var inputStream = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream);
  339.   inputStream.init(file, 0x01, 0600, 0);
  340.   var stream = Components.classes["@mozilla.org/binaryinputstream;1"].createInstance(Components.interfaces.nsIBinaryInputStream);
  341.   stream.setInputStream(inputStream);
  342.   var encoded = btoa(stream.readBytes(stream.available()));
  343.   return "data:" + contentType + ";base64," + encoded;
  344. }
  345.  
  346. function GmarksObserverControl()
  347. {
  348.   this.register();
  349. }
  350. GmarksObserverControl.prototype = {
  351.   observe: function(subject, topic, data) {
  352.     //dump("observer: "+topic+"\n");
  353.     if (topic=="gmarks-refresh"){
  354.       if (data=="" || data==null)
  355.         GM.refresh();
  356.       else
  357.         setTimeout('GM.refresh();',data);
  358.     }
  359.     else if (topic=="gmarks-redrawImages"){
  360.       setTimeout(function(){
  361.         if (treeView!=null){
  362.           //redraw tree with new favicon images
  363.           treeView.getTreeBox().invalidate();
  364.         }
  365.       },2000);
  366.     }
  367.     else if (topic=="gmarks-connectionerror"){
  368.       data=data.split("|");
  369.       if (data.length>1){
  370.         bm=GMS.createNewBookmark();//new bookmark();
  371.         bm.url=data[0]; bm.title=data[1];
  372.         showConnectError(bm);
  373.       }
  374.     }
  375.     else if (topic=="gmarks-onload"){
  376.       setTimeout(function(){
  377.         document.getElementById("loadingContainer").setAttribute("hidden","true");
  378.  
  379.         GM.onLoad();
  380.       },5);
  381.       if (treeView)
  382.         treeView.loading=false;
  383.     }
  384.     else{
  385.       var loadingContainer=document.getElementById("loadingContainer")
  386.       if (topic=="gmarks-bookmarks-load-start"){
  387.         if (loadingContainer) loadingContainer.setAttribute("hidden","false");
  388.         if (typeof treeView != "undefined"){
  389.           treeView.loading=true;
  390.           if (treeView.treeBox){
  391.             treeView.treeBox.beginUpdateBatch();
  392.             treeView.treeBox.endUpdateBatch();
  393.           }
  394.         }
  395.       }
  396.       else if (topic=="gmarks-onrefresh"){
  397.         setTimeout(function(){
  398.           if (loadingContainer) loadingContainer.setAttribute("hidden","true");
  399.  
  400.           GM.onRefresh();
  401.         },5);
  402.         if (treeView)
  403.           treeView.loading=false;
  404.       }
  405.       else if (topic=="gmarks-retryreload"){
  406.         if (loadingContainer) loadingContainer.setAttribute("hidden","true");
  407.         if (treeView)
  408.           treeView.loading=false;
  409.         GM.onRetryLoad();
  410.       }
  411.       else if (topic=="gmarks-quickrefresh"){
  412.         if (loadingContainer) loadingContainer.setAttribute("hidden","true");
  413.         if (treeView)
  414.           treeView.loading=false;
  415.         GM.quickRefresh();
  416.       }
  417.     }
  418.   },
  419.   register: function() {
  420.     var observerService = Components.classes["@mozilla.org/observer-service;1"]
  421.               .getService(Components.interfaces.nsIObserverService);
  422.     observerService.addObserver(this, "gmarks-refresh", false);
  423.     observerService.addObserver(this, "gmarks-onload", false);
  424.     if (document.getElementById("gmarkList")!=null)
  425.       observerService.addObserver(this, "gmarks-bookmarks-load-start", false);
  426.     observerService.addObserver(this, "gmarks-retryreload", false);
  427.     observerService.addObserver(this, "gmarks-onrefresh", false);
  428.     observerService.addObserver(this, "gmarks-quickrefresh", false);
  429.     observerService.addObserver(this, "gmarks-redrawImages", false);
  430.   },
  431.   unregister: function() {
  432.     var observerService = Components.classes["@mozilla.org/observer-service;1"]
  433.               .getService(Components.interfaces.nsIObserverService);
  434.     observerService.removeObserver(this, "gmarks-refresh");
  435.     observerService.removeObserver(this, "gmarks-onload");
  436.     if (treeView && treeView.type=="complete")
  437.       observerService.removeObserver(this, "gmarks-bookmarks-load-start");
  438.     observerService.removeObserver(this, "gmarks-retryreload");
  439.     observerService.removeObserver(this, "gmarks-onrefresh");
  440.     observerService.removeObserver(this, "gmarks-quickrefresh");
  441.     observerService.removeObserver(this, "gmarks-redrawImages");
  442.   }
  443. }
  444.  
  445. function wArg(title,url,labels,notes,tab){
  446.   this.name=title ? title : url;
  447.   this.url=url;
  448.   this.labels=labels;
  449.   this.selectedTab=tab;
  450.   this.description=notes;
  451. }
  452.